// 导入路径辅助模块，避免重复引用
const pathImport = require('../helpers/path_import.js');
const { pageHelper, cloudHelper, validate } = pathImport;;
const { logEvent } = require('../../../helpers/log_helper.js');
const { getNetworkStatus, listenNetworkStatus } = require('../../../helpers/network_helper.js');

Page({
  /**
   * 页面的初始数据
   */
  data: {
    isLoad: false,
    isEdit: true,
    isView: false,

    // 富文本内容
    nodeList: [{
      type: 'text',
      val: ''
    }],

    title: '',
    categoryOptions: ['工作', '技术', '生活', '其他'],
    category: '工作',

    // 标签
    tagOptions: ['重要', '紧急', '参考', '分享'],
    tags: [],
    
    id: '', // 编辑时用
    hasChange: false, // 是否内容有变化
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: async function(options) {
    // 网络检测
    const net = await getNetworkStatus();
    if (!net.isConnected) {
      wx.showToast({ title: '当前无网络，请检查连接', icon: 'none' });
    } else if (net.networkType === '2g') {
      wx.showToast({ title: '当前为2G弱网，体验可能受影响', icon: 'none' });
    }
    listenNetworkStatus((res) => {
      if (!res.isConnected) wx.showToast({ title: '网络已断开', icon: 'none' });
      else if (res.networkType === '2g') wx.showToast({ title: '当前为2G弱网', icon: 'none' });
    });
    logEvent('page_load', { page: 'knowledge_note' });

    ProjectBiz.initPage(this);

    // 如果传入ID，则是编辑模式
    if (options && options.id) {
      this.setData({
        id: options.id,
        isLoad: true
      });
      this._loadDetail(options.id);
    } else {
      this.setData({
        isLoad: true
      });
    }
  },

  /**
   * 加载详情
   */
  _loadDetail: async function(id) {
    if (!id) return;

    let params = {
      id
    };

    let opts = {
      title: '加载中'
    };

    try {
      let note = await cloudHelper.callCloudData('knowledge/note_detail', params, opts);
      if (!note) return;

      this.setData({
        title: note.KNOWLEDGE_TITLE || '',
        category: note.KNOWLEDGE_CATEGORY || '工作',
        tags: note.KNOWLEDGE_TAGS || [],
        nodeList: note.KNOWLEDGE_CONTENT || [{
          type: 'text',
          val: ''
        }]
      });
    } catch (err) {
      console.error(err);
    }
  },

  /**
   * 标题输入
   */
  bindTitleInput: function(e) {
    this.setData({
      title: e.detail.value,
      hasChange: true
    });
  },

  /**
   * 分类选择
   */
  bindCategoryChange: function(e) {
    this.setData({
      category: this.data.categoryOptions[e.detail.value],
      hasChange: true
    });
  },

  /**
   * 标签选择
   */
  bindTagTap: function(e) {
    let tag = e.currentTarget.dataset.tag;
    let tags = this.data.tags;
    let idx = tags.indexOf(tag);
    
    if (idx > -1) {
      tags.splice(idx, 1);
    } else {
      tags.push(tag);
    }
    
    this.setData({
      tags,
      hasChange: true
    });
  },

  /**
   * 编辑/预览切换
   */
  bindViewModeChange: function() {
    this.setData({
      isView: !this.data.isView
    });
  },

  /**
   * 富文本内容变化
   */
  bindEditorChange: function() {
    this.setData({
      hasChange: true
    });
  },

  /**
   * 保存
   */
  bindSaveTap: async function() {
    // 数据校验
    if (!this.data.title) {
      return pageHelper.showNoneToast('请填写标题');
    }

    if (this.data.title.length > 50) {
      return pageHelper.showNoneToast('标题不能超过50个字');
    }

    // 拿到富文本内容
    let nodeList = this.selectComponent('#editor').getNodeList();
    if (nodeList.length == 0) {
      return pageHelper.showNoneToast('请填写随手记内容');
    }

    let params = {
      title: this.data.title,
      category: this.data.category,
      tags: this.data.tags,
      content: nodeList
    };

    // 有ID则是编辑
    if (this.data.id) params.id = this.data.id;

    try {
      await cloudHelper.callCloudSumbit('knowledge/note_insert', params, {
        title: !this.data.id ? '添加中' : '修改中'
      });

      // 更新列表和清空输入
      this.setData({
        title: '',
        category: '工作',
        tags: [],
        nodeList: [{
          type: 'text',
          val: ''
        }],
        hasChange: false
      });

      // 返回
      if (this.data.id) {
        wx.navigateBack();
      } else {
        pageHelper.showSuccToast('添加成功');
      }
    } catch (err) {
      console.error(err);
    }
  },

  /**
   * 返回
   */
  bindCancelTap: function() {
    if (this.data.hasChange) {
      wx.showModal({
        title: '提示',
        content: '内容已修改，是否放弃保存？',
        cancelText: '继续编辑',
        confirmText: '放弃保存',
        success: res => {
          if (res.confirm) {
            wx.navigateBack();
          }
        }
      });
    } else {
      wx.navigateBack();
    }
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: async function() {
    await this._loadDetail(this.data.id);
    wx.stopPullDownRefresh();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function() {}
}) 